import MyPromise from "./MyPromise_v8.js";

// const promise = new MyPromise((resolve, reject) => {
//   setTimeout(() => {
//     resolve("success");
//     reject("err");
//   }, 3000);
// });

// promise
//   .then(
//     (value) => {
//       console.log("resolve 1", value);
//     },
//     (reason) => {
//       console.log(" reject 1", reason);
//     }
//   )

// promise
//   .then(
//     (value) => {
//       console.log(value + " resolve 1.1", value);
//     },
//     (reason) => {
//       console.log(" reject 1.1", reason);
//     }
//   )


// const promise = new MyPromise((resolve, reject) => {
//     resolve(100)
// })
// const p1 = promise.then(value => {
//     console.log(value)
//     return p1
// })

// // 测试 .then链式操作
// const promise = new MyPromise((resolve, reject) => {
//     setTimeout(() => {
//         resolve(1)
//     }, 1000)
// })
// const p1 = promise.then(value => {
//     console.log(value)
//     return new MyPromise((resolve, reject) => {
//         console.log('2')
//         setTimeout(() => {
//             resolve(3)
//         }, 1000)
//     })
// }).then(v => {
//     console.log(v)
// })

// // 测试 .then return p  返回上一个p，导致的递归
// const promise = new MyPromise((resolve, reject) => {
//   resolve(100);
// });
// const p1 = promise.then((value) => {
//   console.log(value);
//   return p1;
// });


// // 测试 执行器错误，捕获错误处理
// const promise = new MyPromise((resolve, reject) => {
//     // resolve('success')
//     throw new Error('执行器错误')
// })

// promise.then(value => {
//   console.log(1)
//   console.log('resolve', value)
// }, reason => {
//   console.log(2)
//   console.log(reason.message)
// })


// // 测试.then().then() 不传递参数
// const promise = new MyPromise((resolve, reject) => {
//     resolve(100)
//   })

// promise
//     .then()
//     .then()
//     .then()
//     .then(value => console.log(value))
// const promise2 = new MyPromise((resolve, reject) => {
//   reject('err')
// })
// promise2.then().then().then(value => console.log(value), reason => console.log(reason))


// MyPromise.resolve().then(() => {
//     console.log(0);
//     return MyPromise.resolve(4);
// }).then((res) => {
//     console.log(res)
// })


// 测试 打印 1 2 3 4 5
MyPromise.resolve()
  .then(() => {
    console.log(0)   // (1)
    return MyPromise.resolve(4)
  })
  // 查看谷歌的源码，相当于插入了两个.then，所以打印的是 (0 1)(_ 2)(_ 3)(4 5) (6)
  // .then(() => {}) // return Promise 会多产生一个then
  // .then(() => {
  //   resolve(4)
  // })
  .then((res) => {
    console.log(res)
  })

  MyPromise.resolve()
  .then(() => {
    console.log(1)
  })
  .then(() => {
    console.log(2)
  })
  .then(() => {
    console.log(3)
  })
  .then(() => {
    console.log(5)
  })
  .then(() => {
    console.log(6)
  })

